home *** CD-ROM | disk | FTP | other *** search
/ Aminet 16 / Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso / Aminet / dev / src / wangisrc.lha / wangi / units / BackFill.PAS < prev    next >
Pascal/Delphi Source File  |  1994-12-16  |  3KB  |  110 lines

  1. unit Backfill;
  2.  
  3. (*
  4.  * Unit Backfill
  5.  * Uses boopsi image classes to implement window edge backfills, similar
  6.  * to those around system easyrequesters.
  7.  * 
  8.  *)
  9.  
  10. INTERFACE
  11.  
  12. Uses
  13.     Exec, Intuition, Graphics, Utility;
  14.     
  15. Type
  16.     pFillData = ^tFillData;
  17.     tFillData = Array[0..2] of Word;
  18.     pBackFill = ^tBackFill;
  19.     tBackFill = Record
  20.         bf_OuterFill,              { -|           }
  21.         bf_Innerbevel : Pointer;   {  |- Private! }
  22.         bf_Pattern    : pFillData; { -|           }
  23.     End;
  24.     
  25. Procedure DrawBackFill(bf : tBackFill; Win : pWindow);
  26. Procedure InitBackFill(VAR bf : tBackFill;
  27.                        Win : pWindow;
  28.                        Left, Top, 
  29.                        Width, Height, 
  30.                        IWidth, IUHeight, ILHeight,
  31.                        FGPen, BGPen, Mode: LONG);
  32. Procedure FreeBackFill(bf : tBackFill);
  33.  
  34. IMPLEMENTATION
  35.  
  36. Procedure DrawBackFill;
  37.  
  38. Begin
  39.     { Draw the two images }
  40.     If bf.bf_OuterFill <> NIL then
  41.         DrawImageState(Win^.RPort, pImage(bf.bf_OuterFill), 0, 0, IDS_NORMAL, NIL);
  42.     If bf.bf_InnerBevel <> NIL then
  43.         DrawImageState(Win^.RPort, pImage(bf.bf_InnerBevel), 0, 0, IDS_NORMAL, NIL);
  44. End;
  45.  
  46. Procedure InitBackFill;
  47.  
  48. Var
  49.     patt  : Array[0..3] of Word;
  50.     t     : Array[0..18] of LONG;
  51.     cname : String;
  52.  
  53. Begin
  54.     bf.bf_OuterFill := NIL;
  55.     bf.bf_InnerBevel := NIL;
  56.     bf.bf_Pattern := AllocVec(Sizeof(tFilldata), MEMF_CLEAR);
  57.     if bf.bf_Pattern <> NIL then begin
  58.         bf.bf_Pattern^[0] := $5555; { 0101010101010101 }
  59.         bf.bf_Pattern^[1] := $AAAA; { 1010101010101010 }
  60.         bf.bf_Pattern^[2] := 0;
  61.         t[ 0] := IA_Left;
  62.         t[ 1] := Left;
  63.         t[ 2] := IA_Top;
  64.         t[ 3] := Top;
  65.         t[ 4] := IA_Width;
  66.         t[ 5] := Width;
  67.         t[ 6] := IA_Height;
  68.         t[ 7] := Height;
  69.         t[ 8] := IA_Mode;
  70.         t[ 9] := Mode;
  71.         t[10] := IA_APattern;
  72.         t[11] := LONG(bf.bf_Pattern);
  73.         t[12] := IA_APatSize;
  74.         t[13] := 1;
  75.         t[14] := IA_FGPen;
  76.         t[15] := FGPen;
  77.         t[16] := IA_BGPen;
  78.         t[17] := BGPen;
  79.         t[18] := TAG_DONE;
  80.         cname := FILLRECTCLASS+#0;
  81.         bf.bf_OuterFill := NewObjectA(NIL, @cname[1], @t);
  82.         
  83.         t[ 0] := IA_Left;
  84.         t[ 1] := Left+IWidth;
  85.         t[ 2] := IA_Top;
  86.         t[ 3] := Top+IUHeight;
  87.         t[ 4] := IA_Width;
  88.         t[ 5] := Width-(2*IWidth);
  89.         t[ 6] := IA_Height;
  90.         t[ 7] := Height-IUHeight-ILHeight;
  91.         t[ 8] := IA_Recessed;
  92.         t[ 9] := True_;
  93.         t[10] := TAG_DONE;
  94.         cname := FRAMEICLASS+#0;
  95.         bf.bf_InnerBevel := NewObjectA(NIL, @cname[1], @t);
  96.     End;
  97.     
  98.     DrawBackFill(bf, Win);
  99. End;
  100.  
  101. Procedure FreeBackFill;
  102.  
  103. Begin
  104.     DisposeObject(bf.bf_InnerBevel);
  105.     DisposeObject(bf.bf_OuterFill);
  106.     If bf.bf_Pattern <> NIL then
  107.         FreeVec(bf.bf_Pattern);
  108. End;
  109.     
  110. End.